/* * Flingbox - An OpenSource physics sandbox for Google's Android * Copyright (C) 2009 Jon Ander Peñalba & Endika Gutiérrez * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package edu.eside.flingbox; import edu.eside.flingbox.bodies.Body; import edu.eside.flingbox.scene.Scene; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.SeekBar; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener; public class BodySettingsDialog extends Dialog { /** Contains Body to change properties */ protected final Body mBody; protected final Scene mScene; public BodySettingsDialog(Context context, final Body body, final Scene scene) { super(context); // mContext = context; mBody = body; mScene = scene; } /** * Called when the dialog is first created. */ @Override public void onCreate(Bundle savedInstanceState) { // Set dialog content setContentView(R.layout.body_settings); // Sets dialog title setTitle(R.string.body_settings_name); /* * Lock Body Checkbox */ CheckBox lockBodyCheckbox = (CheckBox) findViewById(R.id.checkbox_lock_body); lockBodyCheckbox.setChecked(mBody.getPhysics().isFixed()); lockBodyCheckbox .setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton arg0, boolean arg1) { mBody.getPhysics().setBodyFixed(arg1); } }); /* * Density SeekBar */ SeekBar densitySeekBar = (SeekBar) findViewById(R.id.seek_bodys_density); densitySeekBar.setMax(400); /* Density is between [-200, 199] */ densitySeekBar.setProgress((int) (Math.log( /* Logaritmical progress */ mBody.getPhysics().getDensity()) * 10f + 200f)); densitySeekBar .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!fromUser) return; /* Density is adjusted exponentially */ mBody.getPhysics() .setDensity( (float) Math.exp(((float) seekBar .getProgress() - 200f) / 10f)); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } }); /* * Restitution SeekBar */ SeekBar restitutionSeekBar = (SeekBar) findViewById(R.id.seek_restitution_coef); restitutionSeekBar.setMax(1024); restitutionSeekBar.setProgress((int) (mBody.getPhysics() .getRestitutionCoeficient() * 1024)); restitutionSeekBar .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!fromUser) return; mBody.getPhysics().setRestitutionCoeficient( (float) progress / 1024f); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } }); /* * Static friction SeekBar */ SeekBar staticFrictionSeekBar = (SeekBar) findViewById(R.id.seek_static_friction); staticFrictionSeekBar.setMax(1024); staticFrictionSeekBar.setProgress((int) (mBody.getPhysics() .getStaticFrictionCoeficient() * 1024)); staticFrictionSeekBar .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!fromUser) return; mBody.getPhysics().setStaticFrictionCoeficient( (float) progress / 1024f); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } }); /* * Kinetic friction SeekBar */ SeekBar kineticFrictionSeekBar = (SeekBar) findViewById(R.id.seek_kinetic_friction); kineticFrictionSeekBar.setMax(1024); kineticFrictionSeekBar.setProgress((int) (mBody.getPhysics() .getDynamicFrictionCoeficient() * 1024)); kineticFrictionSeekBar .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!fromUser) return; mBody.getPhysics().setDynamicFrictionCoeficient( (float) progress / 1024f); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } }); Button removeButton = (Button) findViewById(R.id.button_remove_body); removeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mScene.remove(mBody); cancel(); } }); } }